iT邦幫忙

2024 iThome 鐵人賽

DAY 13
0

JwtService 類別負責處理JWT的生成、解析和驗證。這些操作是透過使用一個密鑰(SECRET_KEY)來進行簽名和驗證,以確保數據的完整性和安全性。

@Service
public class JwtService {
    private static final String SECRET_KEY = "your-secret-key";
}

extractUserName 方法通過 JWT token 提取用戶名。它內部調用了
extractClaims 方法來解析 token,並返回 JWT 的主題( subject ),即用戶名。

public String extractUserName(String token) {
    return extractClaims(token, Claims::getSubject);
}

extractClaims 方法是一個通用方法,用於提取JWT中的任何聲明(claims)。它接受一個 Function 作為參數,用於從 Claims 對象中提取特定的數據。

public <T> T extractClaims(String token, Function<Claims,T> claimsResolver) {
    final Claims claims = extractClaims(token);
    return claimsResolver.apply(claims);
}

generateToken 方法有兩個重載版本。第一個版本只接收 UserDetails 對象並生成一個不含附加聲明的JWT。

public String generateToken(UserDetails userDetails) {
    return generateToken(new HashMap<>(), userDetails);
}

第二個版本允許添加自定義附加聲明,並生成包含這些聲明的JWT。

public String generateToken(Map<String, Object> extraClaims, UserDetails userDetails) {
    return Jwts
        .builder()
        .setClaims(extraClaims)
        .setSubject(userDetails.getUsername())
        .setIssuedAt(new Date(System.currentTimeMillis()))
        .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 10))
        .signWith(getSignInKey(), SignatureAlgorithm.HS256)
        .compact();
}


上一篇
Day 12 JwtService
下一篇
Day 14 JWT服務驗證 2
系列文
Spring Boot微服務架構:API設計與實現30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言